There are two pseudo-operations for calling subroutines, CALL to code non-relocatable subroutines directly linked with the main program, and LIBF to call relocatable library subroutines through a " transfer vector ".
2.
It is, of course, perfectly possible to generate the above code " inline " using a single assembler macro statement, specifying just four or five operands ( or alternatively, make it into a library subroutine, accessed by a simple call, passing a list of parameters ), making the optimization readily accessible to inexperienced programmers.